今天我們要把建立好的專案進化成 Chrome 可以辨識的 extension!
因此我們就會需要 manifest.json
有接觸過 PWA 或 APP 可能對於這個檔案比較熟悉,manifest.json 類似一個程式的說明書,用來告訴平台這個程式的一些必要或額外的資訊。
可以從 Google 提供的 Chrome Extension 的教學示範 Hello World 擴充功能中得知,一個最小可運作的 Chrome Extension 其實只要:
my_extension/
├─ manifest.json
└─ hello.html (extension 顯示的畫面)
就可以至 chrome://extensions 載入使用了
而隨著需求的增加,架構會漸漸新增不同的檔案,例如:
新增 manifest.json 很簡單,只要在昨天建立的專案的根目錄新增一個檔案,並命名為 manifest.json
就可以囉!
我們這次使用 Vite + Vue + Tailwind 所以架構就會是
mr-review-message/
├─ manifest.json
├─ .vscode
├─ node_module
├─ public
├─ src
├─ .gitignore
├─ index.html
├─ package-lock.json
├─ package.json
├─ README.md
└─ vite.config.js
接下來就是重點了!
manifest.json 要寫什麼,才可以讓 Chrome Extension 了解這個專案是用來作為 Extension 使用的呢?
根據 Chrome Extension 文件說明,我們可以整理出一些我們需要使用到的參數:
key | 說明 |
---|---|
manifest_version | 目前 Chrome 官方唯一支援的值為 3。指定擴充功能使用的資訊清單檔案格式版本。 |
name | Extension 的名字,顯示在 Chrome 線上應用程式商店、安裝對話方塊和使用者的 Chrome Extension (chrome://extensions) 中 |
version | Extension 的版本,用於識別 Extension 版本號碼的字串 |
description | Extension 說明,顯示在 Chrome 線上應用程式商店和使用者的 Extension 管理頁面中 |
icons | 一或多個尺寸代表 Extension 的圖示。通常應使用 PNG 格式,因為 PNG 是最能支援透明效果,但可以是 Blink 支援的任何光柵格式,包括 BMP、GIF、ICO 和 JPEG。128(安裝期間及 Chrome 線上應用程式商店使用)、48(用於 Extensions 管理頁面)、16(Extensions 管理頁面的網站小圖示) |
permissions | 可使用特定的 Chrome Extension API。這邊會需要使用 storage(可保存使用者資料和狀態)、tabs(與瀏覽器的分頁系統互動) |
background | 處理 Extension 事件 的 Service Worker,做為事件處理常式(之後會再介紹) |
action | 定義 Google 工具列中 Extension 圖示的外觀和行為。這邊設定使用者點選時,Extension 會顯示彈出式視窗。 |
content_scripts | 指定使用者開啟特定網頁時要使用的 JavaScript 或 CSS 檔案(之後會再介紹) |
以下是參考範例:
{
"manifest_version": 3,
"name": "MR 通知文字小工具",
"version": "1.0.0",
"description": "快速產生 Merge Requesr 文字範本",
"icons": {
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"permissions": [
"storage",
"tabs"
],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "index.html"
},
"content_scripts": [
{
"matches": ["https://gitlab.com/*/merge_requests/*"],
"js": ["content.js"]
}
]
}
這樣,我們的 Extension 就有了一個基本的骨架。接下來的日子,我們會逐一補齊這些零件,讓它變成一個真正好用的小工具。